package collection.stream;

/**
 * 常见的中间环节
 */
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class StreamApiDemo2 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 10; i++){
            list.add(random.nextInt(10));
        }
        System.out.println(list);
        /*
        * 中间环节：
        * filter：对集合中的每个元素进行过滤
        * */
        //获取集合中的所有偶数
        List<Integer> list2=list.stream()
                            .filter(x->x%2==0)//仅保留满足lambda表达式要求的元素
                            .collect(Collectors.toList());
        System.out.println(list2);


        /*
        * 中间环节：
        * distinct：对集合中的每个元素进行去重
        * */
        //对集合去重
        List<Integer> list3 = list.stream()
                              .distinct()
                              .collect(Collectors.toList());
        System.out.println(list3);

        /*
        *中间环节：
        * sort:对集合中的元素进行排序
        *
        * */
        List<Integer> list4 = list.stream()
                              .sorted()
                              .collect(Collectors.toList());//升序

        List<Integer> list5 = list.stream()
                              .sorted((x1,x2)->x2-x1)//降序
                              .collect(Collectors.toList());
        System.out.println(list4);
        System.out.println(list5);

        /*
        * 对list集合每个元素扩大5倍，并且仅保留其中所有的偶数，并去除重复
        * 在将集合按照从大到小排序最终得到结果
        * */
        List<Integer> list6 = list.stream()
                                  .map(x->x*5)//扩大五倍
                                  .filter(x->x%2==0)//取偶数
                                  .distinct()//去重
                                  .sorted((x1,x2)->x2-x1)//排序，从小到大
                                  .collect(Collectors.toList());//收集元素
        System.out.println(list6);



    }
}
